CSS 預處理器是什麼?


Posted by GL on 2022-03-06

為什麼要使用 CSS 預處理器

在說明什麼是 CSS 預處理器之前,首先我們來問,為什麼要使用 CSS 預處理器呢? 原生的 CSS 的哪些不便,讓懶惰成性的工程師,願意特地再花時間學習一套語法,勝過寫原生 CSS?

了解脈絡或許不會讓你的高中歷史成績變好(承認吧,當時坐在隔壁的班草 / 班花的確更能引起你的興趣),但知道原因,會讓你用 CSS 預處理時多點心安理得、多點理直氣壯,跟面試官聊起時才不會大眼瞪小眼,然後心裡暗付著,難道就是愛情~

對 CSS 的愛恨糾葛

自從 1996 年 12月,CSS1 發表以來到現在的 CSS3,CSS 一直被認為是定義網頁樣式的屬性與排版等輔助性裝飾功能,其核心機制與語法沒有太大的改變,BUT 看過韓劇的人就知道,事情的發展並非想像中的簡單,往往會朝著意想不到的複雜化發展,你愛的人有可能其實是失散多年的親哥,而從小暗戀著你的隔壁鄰居小明,就算幫你撐傘,替你擋子彈,卻還是拿他的一片真心換來你絕情的背影。CSS 一行行單純的屬性描述,雖然簡單易學易懂,然而,隨著網頁開發的複雜度提高,網頁開發者發現傳統 CSS 有一些問題難以支持大型專案的維護與重製需求,例如:

  1. 遇到大量且相同的樣式要修改,例如文字或顏色等,就要花很多時間使用查找以及取代的功能調整
// 如果老闆突然說要把整個網站中的文字改成紅色的 red,
// 你通常會要一行一行的找出來並取代,
// 但,如果有 100 行 要改呢?
// 又或者 100 行中有 20 行維持原設定 ?

div{
    color: green;
}

p{
    color:blue; 
}
  1. 命名時如果底下還有很多子元素,父元素還是需要重複打出,而且如果以後想要修改父元素名稱,要逐個找出來做調整
.person{
  ...
}

.person .avatar{
  ...
}

.person .name{
  ...
}

.person .address{
  ...
}
  1. 重複的樣式組需要寫多次,無法模組化再利用
// div1 與 div2 有很多重複的屬性,只有 font-size 不同


div1{
 width: 100%;
 heigh: 100%;
 margin: 5px;
 padding: 10px 20px;
 font-size:16px;
}

div2{
 width: 100%;
 heigh: 100%;
 margin: 5px;
 padding: 10px 20px;
 font-size:24px;
}

沒有變數與合理的樣式重複使用機制,以及需要寫很多重複的選擇器等情況降低了 CSS 的開發效率以及維護性,尤其是遇到複雜的專案開發時。

所以,CSS 預處理器是什麼

為了更快更有系統的管理 CSS,有開發者思考若是能讓 CSS 像一般程式語言一樣,有變數、函式、迴圈等功能該有多好。於是有了 CSS 預處理器(CSS Preprocessor)的誕生。

簡單來說,CSS 預處理器就是用另一種特定的語法規則撰寫 CSS,然後再幫你編譯成原生 CSS 檔案,讓瀏覽器可以讀取。

由於 CSS 預處理器是在生成 CSS 之前,所需進行撰寫與編譯,所以才會稱作"預(pre-)"處理


圖片來源

這個方式的好處是,讓開發者透過像是變數(varialbe)、混入(mixin)、繼承(extend)、嵌套(nesting)等常見的程式或邏輯的特性去撰寫 CSS,撰寫出更簡潔、可讀性高、可重複且易於維護的 CSS 程式碼

目前較多人使用相對成熟的 CSS 預處理器有: Sass/Scss、Less、Stylus,功能與語法都差不多,可以依照自己或公司使用習慣選用

由於 CSS 預處理器之後還是會被轉譯為原生 CSS,在瀏覽器中讀取的其實是轉譯後的原生 CSS,所以就算不用 CSS 預處理器直接使用原生的 CSS 也可以,就像手機沒有濾鏡 APP 可以自拍嗎? 當然還是可以拍,只是被打回原形後好不好看,你與網友們能不能接受。

有些人認為,在小型的個人 side project 或者單純的活動案,用原生 CSS 即可,省去建置編譯 CSS 預處理器相關環境的繁瑣;而在開發大型專案或多人協作時,為了管理以及維護的方便性,可以採用 CSS 預處理器。

但要選擇使用哪一套 CSS 預處理器,或是否使用 CSS 預處理器,終究還是要考量自己的熟練度以及公司團隊內部的習慣與規範,評估對此專案更有利的方式。

參考來源:


#css #CSS預處理器 #SASS







Related Posts

Day 06 遠交近攻

Day 06 遠交近攻

Deep Learning on 3D object detection paper 閱讀路徑

Deep Learning on 3D object detection paper 閱讀路徑

如何使用 Python 學習機器學習(Machine Learning)

如何使用 Python 學習機器學習(Machine Learning)


Comments